import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';
import { message } from 'ant-design-vue';

const instance = axios.create({
  baseURL: window.location.origin, // 设置API的基础路径
  timeout: 30000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
  },
});

// 添加请求拦截器
instance.interceptors.request.use(
  config => {
    // 在这里可以添加全局的请求处理逻辑，比如添加token
    const requestUrl = config.url;
    if (requestUrl !== '/login') {
      const token = localStorage.getItem('user_token');
      if (token) {
        config.headers['Authorization'] = `Bearer ${token}`;
      }
    }
    return config;
  },
  (error: AxiosError) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  },
);

// 添加响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    // 对响应数据做处理
    if (response.status === 200) {
      return response.data;
    }
  },
  (error: AxiosError) => {
    message.error((error as any).response.data.message);
    // 对响应错误做处理
    return Promise.reject(error);
  },
);

export function request(
  url: string,
  config: AxiosRequestConfig | any,
): Promise<any> {
  const pms = {
    url,
    ...config,
  };
  if (config.method === 'GET') {
    pms.params = config.data;
  } else {
    pms.data = config.data;
  }
  return instance(pms);
}
